Hi Janko,
hier schon mal eine etwas überarbeitete Version des Scriptes...:
;----- Softwaresprite Antic D ---------
delay = 245
rtclok = 18
vcount = 54283
random = 53770
screen = 4096
plx = 240 ; byte position of player
ply = 241 ; line of player position
shifted = 242 ; position of player inside "byte"
dx = 243
dy = 244
tmp = 8224 ; area for background storing
org $600
dlist ;ANTIC D - 160x96 2 Scanlines, 4 Farben
:3 .by 112
.by 77
.wo screen
:99 .by 13
.by 65
.wo dlist
.proc main
mwa #dlist 560 ; gr. mod 160x100,4 colors
jsr fillscr
lda #0
sta plx
sta ply
sta shifted
sta dx
sta dy
mva #34 709
loop jsr draw_sprite
mva #2 delay
jsr wait
jsr restorehaupt
lda #136 ; some bacground color changes too measure time for erasing (white) and drwaing (blue) sprite
sta vcount
ldx shifted
cpx #3
bne @+
inc plx
ldx #255
@ inx
stx shifted
ldx plx
cpx #40
bne @+
ldx #0
stx plx
@ ldx ply
lda dy
bne @+
inx
inx
@ dex
bne @+
dec dy
@ cpx #88
bne @+
inc dy
@ stx ply
jmp loop
.end
;------------------ Subroutinen ------------------------------
.proc drawalles
ldy #0
jsr draw
iny
jsr draw
iny
jsr draw
iny
jsr draw
ldy #40
jsr draw
iny
jsr draw
iny
jsr draw
iny
jsr draw
ldy #80
jsr draw
iny
jsr draw
iny
jsr draw
iny
jsr draw
ldy #120
jsr draw
iny
jsr draw
iny
jsr draw
iny
jsr draw
ldy #160
jsr draw
iny
jsr draw
iny
jsr draw
iny
jsr draw
ldy #200
jsr draw
iny
jsr draw
iny
jsr draw
iny
jsr draw
rts
.endp
.proc restorealles
ldy #0
jsr restore
iny
jsr restore
iny
jsr restore
iny
jsr restore
ldy #40
jsr restore
iny
jsr restore
iny
jsr restore
iny
jsr restore
ldy #80
jsr restore
iny
jsr restore
iny
jsr restore
iny
jsr restore
ldy #120
jsr restore
iny
jsr restore
iny
jsr restore
iny
jsr restore
ldy #160
jsr restore
iny
jsr restore
iny
jsr restore
iny
jsr restore
ldy #200
jsr restore
iny
jsr restore
iny
jsr restore
iny
jsr restore
rts
.endp
.proc draw
lda (254),y
sta (248),y
and (250),y
ora (252),y
sta (254),y
rts
.endp
.proc restore
lda (248),y
sta (254),y
rts
.endp
.proc fillscr ;254/255 0-Page-Variablen für Screen
mwa #screen 254
ldx #16
fill2 ldy #0
fill lda random
sta (254),y
iny
bne fill
inc 255
dex
bne fill2
rts
.endp
.proc wait
clc
ldx delay ; Warteschleife
st
lda RTCLOK+2
wa
cmp RTCLOK+2
beq wa
dex
bpl st
rts
.endp
.proc draw_sprite
ldx ply
clc
lda tabley_lo,x
adc plx
sta 254
lda tabley_hi,x
adc #0
sta 255
ldx shifted
lda sprite_data_lo,x
sta 252
lda sprite_data_hi,x
sta 253
lda mask_data_lo,x
sta 250
lda mask_data_hi,x
sta 251
mwa #tmp 248
jsr drawalles
clc
lda 250
adc #240
sta 250
bcc @+
inc 251
@ clc
lda 252
adc #240
sta 252
bcc @+
inc $fd
@ clc
lda 254
adc #240
sta 254
bcc @+
inc 255
@ clc
lda 248
adc #240
sta 248
bcc @+
inc 249
@
jsr drawalles
rts
.endp
.proc restorehaupt
ldx ply
clc
lda tabley_lo,x
adc plx
sta 254
lda tabley_hi,x
adc #0
sta 255
mwa #tmp 248
jsr restorealles
clc
lda 254
adc #240
sta 254
bcc @+
inc 255
@ clc
lda 248
adc #240
sta 248
bcc @+
inc $f9
@ jsr restorealles
rts
.endp
org 3584
tabley_lo
:100 dta l(4096+40*#)
tabley_hi
:100 dta h(4096+40*#)
org 3968
sprite_data_lo
:4 dta l(8192+8*#)
sprite_data_hi
:4 dta h(8192+8*#)
mask_data_lo
:4 dta l(8196+8*#)
mask_data_hi
:4 dta h(8196+8*#)
org 8192
sprite
dta 255,255,255,0
dta 0,0,0,255
dta 63,255,255,192
dta 192,0,0,63
dta 15,255,255,240
dta 240,0,0,15
dta 3,255,255,252
dta 252,0,0,3
org 8192+40
dta 255,255,255,0
dta 0,0,0,255
dta 63,255,255,192
dta 192,0,0,63
dta 15,255,255,240
dta 240,0,0,15
dta 3,255,255,252
dta 252,0,0,3
org 8192+80
dta 255,255,255,0
dta 0,0,0,255
dta 63,255,255,192
dta 192,0,0,63
dta 15,255,255,240
dta 240,0,0,15
dta 3,255,255,252
dta 252,0,0,3
org 8192+120
dta 255,0,255,0
dta 0,255,0,255
dta 63,192,63,192
dta 192,63,192,63
dta 15,240,15,240
dta 240,15,240,15
dta 3,252,3,252
dta 252,3,252,3
org 8192+160
dta 255,0,255,0
dta 0,255,0,255
dta 63,192,63,192
dta 192,63,192,63
dta 15,240,15,240
dta 240,15,240,15
dta 3,252,3,252
dta 252,3,252,3
org 8192+200
dta 255,0,255,0
dta 0,255,0,255
dta 63,192,63,192
dta 192,63,192,63
dta 15,240,15,240
dta 240,15,240,15
dta 3,252,3,252
dta 252,3,252,3
org 8192+240
dta 255,0,255,0
dta 0,255,0,255
dta 63,192,63,192
dta 192,63,192,63
dta 15,240,15,240
dta 240,15,240,15
dta 3,252,3,252
dta 252,3,252,3
org 8192+280
dta 255,0,255,0
dta 0,255,0,255
dta 63,192,63,192
dta 192,63,192,63
dta 15,240,15,240
dta 240,15,240,15
dta 3,252,3,252
dta 252,3,252,3
org 8192+320
dta 255,0,255,0
dta 0,255,0,255
dta 63,192,63,192
dta 192,63,192,63
dta 15,240,15,240
dta 240,15,240,15
dta 3,252,3,252
dta 252,3,252,3
org 8192+360
dta 255,255,255,0
dta 0,0,0,255
dta 63,255,255,192
dta 192,0,0,63
dta 15,255,255,240
dta 240,0,0,15
dta 3,255,255,252
dta 252,0,0,3
org 8192+400
dta 255,255,255,0
dta 0,0,0,255
dta 63,255,255,192
dta 192,0,0,63
dta 15,255,255,240
dta 240,0,0,15
dta 3,255,255,252
dta 252,0,0,3
org 8192+440
dta 255,255,255,0
dta 0,0,0,255
dta 63,255,255,192
dta 192,0,0,63
dta 15,255,255,240
dta 240,0,0,15
dta 3,255,255,252
dta 252,0,0,3
run main
wichtig ist hinten die Definition des Sprite und der Maske.
Pro Sprite-Zeile habe ich 8 dta Anweisungen. Jeweils die Definition der Zeile (zB 255,255,255,0) die nächste Zeile (0,0,0,255) ist dann die invertierte Maske. Und dann kommt jeweils ein shift nach rechts incl. Maske dann...